import { getToken } from "@/utils/auth"
import { setToken } from "@/utils/auth"
import { getUserInfo, login } from "@/api/user"
import { removeToken } from "@/utils/auth"
import { constantRoutes } from '@/router'

// actions: 接口请求返回的数据要存入全局数据时，这个接口请求就要actions里面发送

const state = {
  token: getToken() || '',
  userInfo: {},
  // routes：[所有的静态路由规则 + 筛选后的动态路由规则]
  routes: []
}

const mutations = {
  setToken(state, token) {
    // 将token存入全局数据
    state.token = token
    // 将token存入本地
    setToken(token)
  },
  // 修改userInfo的mutation函数
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 清除全局数据信息
  logout(state) {
    // 清除全局token数据
    state.token = ''
    // 清除本地存储中的token数据
    removeToken()
    // 清空用户信息全局数据
    state.userInfo = {}
  },
  // 组装routes全局数据
  setRoutes(state, filterRoutes) {
    state.routes = [...constantRoutes, ...filterRoutes]
  }
}

// action函数是异步函数：返回的结果是promise
const actions = {
  // 登录
  async login(ctx, obj) {
    // 发起登录请求
    const res = await login(obj)
    ctx.commit('setToken', res.data)
  },
  // 获取用户资料
  async getUserInfo(ctx) {
    // 调用获取用户资料的接口
    const res = await getUserInfo()
    // 调用mutation函数修改全局数据
    ctx.commit('setUserInfo', res.data)
  }
}

export default {
  // 开启命名空间
  namespaced: true,
  state,
  mutations,
  actions
}